fn main() {
    hello_rust();
}

// rust 中 函数通常使用 snake_case 命名法
fn hello_rust(){
    print_hello("Rust");
}

// 在 rust 函数声明中, 必须写明函数的输入参数类型, 以及返回值类型
// 没有返回值时, 可以省略返回值类型
fn print_hello(msg: &str){
    // lambda 表达式
    let msg = ||{
        // 一般情况下 函数中最后一个表达式的值 为 返回值
        // 等价于 return build_msg("Hello", msg);
        build_msg("Hello", msg)
    };
    println!("{}", msg());
}

// 函数的定义是一种语句
// 语句不能直接赋值给变量
// 如: let i = build_msg(prefix: &str, suffix: &str); // 错误
fn build_msg(prefix: &str, suffix: &str) -> String {
    // 等价于 return String::from(format!("{}, {}", prefix, suffix));
    // 如果 需要在函数中提前返回 可以用 return 关键字 并 返回指定值
    // 这里为表达式, 所以可以直接返回
    String::from(format!("{}, {}", prefix, suffix))
}
